package cn.suchan.jianzhi.q5_queue;

import java.util.Stack;

/**
 * 知识点：用两个栈实现队列
 * 题目描述
 * 用两个栈来实现一个队列，完成队列的Push和Pop操作。 队列中的元素为int类型。
 * (栈是先进后出，队列是先进先出)
 *
 * @author suchan
 * @date 2019/05/23
 */
public class Solution {

    /**
     * 主队列
     */
    Stack<Integer> stack1 = new Stack<Integer>();
    /**
     * 辅助队列
     */
    Stack<Integer> stack2 = new Stack<Integer>();

    /**
     * 入队
     *
     * @param node
     */
    public void push(int node) {
        stack1.push(node);
    }

    /**
     * 出队
     *
     * @return
     */
    public int pop() {
        // 队列先进先出
        Integer vul = null;
        while (!stack2.empty()) {
            // 如果stack2不为空，将所有元素出栈
            vul = stack2.pop();
        }
        // 如果stack2为空，将stack1中的元素取出放入stack2中
        while (!stack1.empty()) {
            vul = stack1.pop();
            stack2.push(vul);
        }
        // 把stack2的栈顶元素出栈，这个栈顶元素就是最先进stack1栈的元素
        int i = 0;
        while (!stack2.empty()) {
            if (i == 0){
                vul = stack2.pop();
            }else {
                int temp = stack2.pop();
                stack1.push(temp);
            }
            i++;
        }
        return vul;
    }

    public Stack<Integer> getQueue(){
        return stack1;
    }

    public static void main(String[] args){
        Solution solution = new Solution();

        solution.push(1);
        solution.push(2);
        solution.push(3);
        solution.push(4);

        Stack<Integer> queue1 = solution.getQueue();
        System.out.println("=====最初的队列值=====");
        for (Integer i : queue1) {
            System.out.println(i);
        }

        int pop = solution.pop();
        System.out.println("=====被移除的值==>" + pop);
        Stack<Integer> queue2 = solution.getQueue();
        System.out.println("=====移除后的队列值=====");
        for (Integer i : queue2) {
            System.out.println(i);
        }

    }
}
